package com.cln.treewalker;

public class TreePreOrderTraverser extends ATraverser {
	// 对T进行前序遍历是先访问树根n,然后依次前序遍历T1,T2,..,Tk。
	// 对T进行中序遍历是先中序遍历T1，然后访问树根n，接着依次对T2,T2,..,Tk进行中序遍历。
	// 对T进行后序遍历是先依次对T1,T2,..,Tk进行后序遍历，最后访问树根n

	// 基本上有4种遍历方法，先、中、后根，逐层。当初我对这个很迷惑，搞这么多干什么？
	// 到了后面才明白，这是不同的应用需要的。
	// 例如，判断两个二叉树是否相等，只要子树根节点不同，那么就不等，显然这时要用先序遍历；
	// 而删除二叉树，必须先删除左右子树，然后才能删除根节点，这时就要用后序遍历。
	// 实际上，搞这么多遍历方法，根本原因是在内存中储存的树是非线性结构。
	// 对于用数组储存的二叉树，这些名目繁多的方法都是没有必要的。
	// 利用C++的封装和重载特性，这些遍历方法能很清晰的表达。

	public void visit(TreeNode node) {
		visitRoot(node);
		visitChild(node.getLeftChild());
		visitChild(node.getRightChild());
	}


}
